home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
pluginy Firefox
/
2109
/
2109.xpi
/
chrome
/
febe.jar
/
content
/
boxnet.js
< prev
next >
Wrap
Text File
|
2009-10-23
|
40KB
|
1,091 lines
// author: Chuck Baker
// contact: febe@customsoftwareconsult.com
// Version 6.3
// Get pointer to preferences
try{
var febePrefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("");
}catch(e){
var msg = febeMsg[169];
febeFatal(e,msg);}
var febeBoxKey = "nyusp9iniip8inoiau41uay4ygttlsku";
var febeAuthToken, febeFolderID, febeBoxMessages = [], febeBoxNodeList = [], febeUploadFileCount, febeUploadFileSize, febeUploadFileList = [];
var febeDispBoxUploadWindow = febePrefs.getBoolPref("extensions.febe.boxnet.uploadwindow");
function febeUploadBackup(){
febeMainWindow.febeSetMsgs();
window.document.title = febeMsg[238];
febeDispBoxUploadWindow = febePrefs.getBoolPref("extensions.febe.boxnet.uploadwindow");
if(febeDispBoxUploadWindow){ // Load messages
febeMsg = window.arguments[0];
window.document.title = febeMsg[238];
}else{
febeMsg = Application.storage.get("febeMsg", "");
}//if
febeUploadAborted = false;
var results = febeBoxLogin();
if(results == false)return false;
var resStatus = febeParseResp(results,"status");
if(resStatus != "logged"){
var tmp="<style>color: red; font-weight: bold; font-size: 15px;</style>"+febeMsg[186]+"\n"+ resStatus;
febeAlert(tmp);
febeUploadAborted = true;
return false;
}//if
febeSetLocalizedDesc();
febeGetBoxMsg(results);
var tmp="<style>color: green; font-weight: bold; font-size: 15px;</style>"+febeMsg[185];
febeprt(febeMsg[185],"green");
febeprt(febeBoxMessages[0],"blue");
febeprt(febeBoxMessages[1],"blue");
febeprt(febeBoxMessages[2],"blue");
febeprt(febeBoxMessages[3],"blue");
febeprt(febeBoxMessages[4],"blue");
febeprt(febeBoxMessages[5],"blue");
febeprt(febeBoxMessages[6],"blue");
febeStartUploadBackup();
if(febeDispBoxUploadWindow){
var box = document.getElementById("messages");
box.contentDocument.close();
}//if
febeUploadClose();
febePrefs.setBoolPref("dom.disable_window_status_change", febeStatusSave);
return !febeUploadAborted;
}//febeUploadBackup()
function febeSetLocalizedDesc(){
febeLocalizedStr["extension"] = febeMsg[244];
febeLocalizedStr["theme"] = febeMsg[245];
febeLocalizedStr["bookmarksJSON"] = febeMsg[246];
febeLocalizedStr["bookmarksHTML"] = febeMsg[279];
febeLocalizedStr["preferences"] = febeMsg[247];
febeLocalizedStr["cookies"] = febeMsg[248];
febeLocalizedStr["userChrome"] = febeMsg[249];
febeLocalizedStr["usernames-passwords"] = febeMsg[250];
febeLocalizedStr["searchPlugins"] = febeMsg[251];
febeLocalizedStr["history"] = febeMsg[252];
febeLocalizedStr["ffhistory"] = febeMsg[253];
febeLocalizedStr["permissions"] = febeMsg[254];
febeLocalizedStr["userDefined"] = febeMsg[255];
febeLocalizedStr["profile"] = febeMsg[256];
febeLocalizedStr["other"] = febeMsg[258];
febeLocalizedStr["directory"] = febeMsg[259];
febeLocalizedStr["size"] = febeMsg[260];
febeLocalizedStr["Uploading:"] = febeMsg[261];
febeLocalizedStr["uploaded ok"] = febeMsg[262];
febeLocalizedStr["Febe Backups"] = febeMsg[263];
febeLocalizedStr["Error:"] = febeMsg[264];
return true;
}//febeSetLocalizedDesc()
function febeStartUploadBackup(){
var prefName = "extensions.febe.lastbackup.folder";
var lastBUfolder = febePreScanUpload();
if(!lastBUfolder){return false;}
febeprt("<br>"+febeMsg[10]+" "+febeEscapeStr(lastBUfolder),"purple");
if(!febeCreateBoxFolder()){return false;}
var errCnt = 0;
var upCnt = 0;
var size = 0;
febeUploadProgress(upCnt,size);
for(var i in febeUploadFileList){
var entry = febeUploadFileList[i];
var results = febeUpload(entry);
if(results){
febeAddTags(results);
upCnt++;
size += entry.fileSize;
febeUploadProgress(upCnt,size);
}else{
errCnt++;
}//if
}//for
if(errCnt == 0){
var tmp = "<br><span style='color: blue; font-weight: bold; font-size: 15px;'>"+febeMsg[11]+" "+upCnt+" "+febeMsg[26]+"</span>";
febeprt(tmp,"purple");
var tmp = febeMsg[11]+" "+upCnt+" "+febeMsg[26];
}else{
var tmp = "<style>color: red; font-weight: bold; font-size: 15px;</style>";
tmp += febeMsg[20];
}//if
if(Application.storage.get("backupOnShutdownCompleted", false)){
var application = Cc["@mozilla.org/toolkit/app-startup;1"].getService(Ci.nsIAppStartup);
application.quit(application.eAttemptQuit);
}else{
febeAlert(tmp);
}//if
return true;
}//febeStartUploadBackup()
function febeUploadProgress(cnt,size){
if(febeDispBoxUploadWindow){
var frame = document.getElementById("progressFrame");
var progressMeter = frame.contentDocument.getElementById("progressMeter");
var progressPct = frame.contentDocument.getElementById("progressPct");
var progressBox = frame.contentDocument.getElementById("progressBox");
var progressLabel = frame.contentDocument.getElementById("progressLabel");
var tmp = febeMsg[240].replace("%CNT%",cnt);
var tmp = tmp.replace("%TOT%",febeUploadFileCount);
progressLabel.setAttribute("value",tmp);
var percentComplete = parseInt(((size / febeUploadFileSize)*100));
progressMeter.setAttribute("value", percentComplete);
var tmp = febeMsg[241].replace("%PCT%",percentComplete+"%");
var size = Math.round(febeUploadFileSize / 1024);
var tmp = tmp.replace("%TOT%",size+"kb");
progressPct.setAttribute("value", tmp);
window.status = tmp;
}
return true;
}//febeUploadProgress(u)
function febePreScanUpload(){
var prefName = "extensions.febe.lastbackup.folder";
var lastBUfolder = febeGetUnicharPref(prefName);
if(lastBUfolder == ""){
febeAlert(febeMsg[9]);
window.close();
febePrefs.setBoolPref("dom.disable_window_status_change", febeStatusSave);
return false;
}//if
febeUploadFileCount = 0;
febeUploadFileSize = 0;
febeInitDir();
febeBuDesDir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
febeBuDesDir.initWithPath(lastBUfolder);
var entries = febeBuDesDir.directoryEntries;
while(entries.hasMoreElements()){
var entry = entries.getNext();
entry.QueryInterface(Ci.nsILocalFile);
if(entry.isDirectory()) continue; // Skip folders
febeUploadFileCount++;
febeUploadFileSize += entry.fileSize;
febeUploadFileList[entry.leafName] = entry;
}//while
return lastBUfolder;
}//febePreScanUpload()()
function febeCreateBoxFolder(){
// Create the backup folder
var prefName = "extensions.febe.boxnet.rootdir";
var folderName= febeGetBoxRootDir();
var xmlstr = "<?xml version='1.0' encoding='UTF-8' ?>";
xmlstr += "<request>";
xmlstr += "<action>create_folder</action>";
xmlstr += "<api_key>"+febeBoxKey+"</api_key>";
xmlstr += "<auth_token>"+febeAuthToken+"</auth_token>";
xmlstr += "<parent_id>0</parent_id>";
xmlstr += "<name>"+folderName+"</name>";
xmlstr += "<share>0</share>"; // Set to "1" to publicly share
xmlstr += "</request>";
var req = new XMLHttpRequest();
req.open('POST', 'http://www.box.net/api/1.0/xml', false);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
try{
req.send(xmlstr);
}catch(e){
febeUploadAborted = true;
return false;
}//try/catch
var resp = req.responseText;
var resStatus = febeParseResp(resp,"status");
var folderName = febeParseResp(resp,"folder_name");
febeFolderID = febeParseResp(resp,"folder_id")
switch(resStatus){
case "create_ok":
febeprt(febeMsg[121]+" "+febeEscapeStr(folderName), "green");
break;
case "s_folder_exists":
febeprt(febeMsg[122]+" "+febeEscapeStr(folderName)+ " OK ", "Darkorange");
break;
default:
febeAlert(febeMsg[123]+" " + resStatus);
return false;
}//switch
// Create timestamp subfolder
if(!febePrefs.getBoolPref("extensions.febe.useTimestampedDirBn")){return true;}
var ts = febePrefs.getCharPref("extensions.febe.timestamp.format");
if(!febeVerifyTimestamp(ts)){return false;}
var folderName = febeMakeTimestampName(ts);
var xmlstr = "<?xml version='1.0' encoding='UTF-8' ?>";
xmlstr += "<request>";
xmlstr += "<action>create_folder</action>";
xmlstr += "<api_key>"+febeBoxKey+"</api_key>";
xmlstr += "<auth_token>"+febeAuthToken+"</auth_token>";
xmlstr += "<parent_id>"+febeFolderID+"</parent_id>";
xmlstr += "<name>"+folderName+"</name>";
xmlstr += "<share>0</share>"; // Set to "1" to publicly share
xmlstr += "</request>";
var req = new XMLHttpRequest();
req.open('POST', 'http://www.box.net/api/1.0/xml', false);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
try{
req.send(xmlstr);
}catch(e){
febeUploadAborted = true;
return false;
}//try/catch
var resp = req.responseText;
var resStatus = febeParseResp(resp,"status");
febeFolderID = febeParseResp(resp,"folder_id")
switch(resStatus){
case "create_ok":
febeprt(febeMsg[121]+" "+febeEscapeStr(folderName), "green");
break;
case "s_folder_exists":
febeprt(febeMsg[122]+" "+febeEscapeStr(folderName)+ " : "+febeMsg[8], "red");
return false;
default:
febeAlert(febeMsg[123]+" " + resStatus);
return false;
}//switch
return true;
}//febeCreateBoxFolder()
function febeAddTags(boxObj){
// Add a tag to the uploaded file
var tag, fname;
fname = boxObj.fName;
switch(true){
case Boolean(fname.match(/^.*\.xpi$/)):
tag = febeLocalizedStr["extension"];
break;
case Boolean(fname.match(/^.*\.jar$/)):
tag = febeLocalizedStr["theme"];
break;
case Boolean(fname.match(/^bookmarks{.*}\.json$/)):
tag = febeLocalizedStr["bookmarksJSON"];
break;
case Boolean(fname.match(/^bookmarks{.*}\.html$/)):
tag = febeLocalizedStr["bookmarksHTML"];
break;
case Boolean(fname.match(/^prefs{.*}\.js$/)):
tag = febeLocalizedStr["preferences"];
break;
case Boolean(fname.match(/^cookies{.*}\.json$/)):
tag = febeLocalizedStr["cookies"];
break;
case Boolean(fname.match(/^userChrome{.*}\.fbu$/)):
tag = febeLocalizedStr["userChrome"];
break;
case Boolean(fname.match(/^usernames-passwords{.*}\.json$/)):
tag = febeLocalizedStr["usernames-passwords"];
break;
case Boolean(fname.match(/^searchPlugins{.*}\.fbu$/)):
tag = febeLocalizedStr["searchPlugins"];
break;
case Boolean(fname.match(/^history{.*}\.json$/)):
tag = febeLocalizedStr["history"];
break;
case Boolean(fname.match(/^ffhistory{.*}\.json$/)):
tag = febeLocalizedStr["ffhistory"];
break;
case Boolean(fname.match(/^permissions{.*}\.json$/)):
tag = febeLocalizedStr["permissions"];
break;
case Boolean(fname.match(/^profileFx[\d]{.*}\.fbu$/)):
tag = febeLocalizedStr["profile"];
break;
default:
febeUDBuInit();
for(var i in febeUDBuList){
udBuName = i+"{"+febeProfName+"}"
if(fname.indexOf(udBuName) == 0){ // Not the best way to do this, but it will have to do for now.
tag = febeLocalizedStr["userDefined"];
break;
}//if
}//for
if(!tag){tag = febeLocalizedStr["other"];}
break;
}//switch
var xmlstr = "<?xml version='1.0' encoding='UTF-8' ?>";
xmlstr += "<request>";
xmlstr += "<action>add_to_tag</action>";
xmlstr += "<api_key>"+febeBoxKey+"</api_key>";
xmlstr += "<auth_token>"+febeAuthToken+"</auth_token>";
xmlstr += "<tags><item>"+tag+"</item></tags>";
xmlstr += "<target>file</target>";
xmlstr += "<target_id>"+boxObj.targetID+"</target_id>";
xmlstr += "</request>";
var req = new XMLHttpRequest();
req.open('POST', 'http://www.box.net/api/1.0/xml', false);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
try{
req.send(xmlstr);
}catch(e){
febeUploadAborted = true;
return false;
}//try/catch
var resp = req.responseText;
var resStatus = febeParseResp(resp,"status");
switch(resStatus){
case "addtotag_ok":
febeprt(febeMsg[199].replace("%TAG%",tag),"green");
break;
default:
febeAlert(febeMsg[200].replace("%FILE%",boxObj.fName)+"\n"+resStatus);
return false;
}//switch
return true;
}//febeAddTags()
function febeUpload(nsFilename){
var uploadName = nsFilename.leafName;
febeprt("<br>"+febeMsg[21]+" "+febeEscapeStr(uploadName),"purple")
// Buffer the upload file
var inStream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
inStream.init(nsFilename, 1, 1, inStream.CLOSE_ON_EOF);
var bufInStream = Cc["@mozilla.org/network/buffered-input-stream;1"].createInstance(Ci.nsIBufferedInputStream);
bufInStream.init(inStream, 4096);
//Setup the boundry start stream
var boundary = "--F-E-B-E--U-p-l-o-a-d-------------" + Math.random();
var startBoundryStream = Cc["@mozilla.org/io/string-input-stream;1"].createInstance(Ci.nsIStringInputStream);
startBoundryStream.setData("\r\n--"+boundary+"\r\n",-1);
// Setup the boundry end stream
var endBoundryStream = Cc["@mozilla.org/io/string-input-stream;1"].createInstance(Ci.nsIStringInputStream);
endBoundryStream.setData("\r\n--"+boundary+"--",-1);
// Setup the mime-stream - the 'part' of a multi-part mime type
var mimeStream = Cc["@mozilla.org/network/mime-input-stream;1"].createInstance(Ci.nsIMIMEInputStream);
mimeStream.addContentLength = false;
mimeStream.addHeader("Content-disposition","form-data; charset: utf-8; accept-charset: utf-8; name=\""+uploadName+"\"; filename=\""+uploadName+"\"");
mimeStream.addHeader("Content-type","multipart/form-data; charset: utf-8; accept-charset: utf-8;");
mimeStream.setData(bufInStream);
// Setup a multiplex stream
var multiStream = Cc["@mozilla.org/io/multiplex-input-stream;1"].createInstance(Ci.nsIMultiplexInputStream);
multiStream.appendStream(startBoundryStream);
multiStream.appendStream(mimeStream);
multiStream.appendStream(endBoundryStream);
var size = Math.round(nsFilename.fileSize / 1024);
febeprt(febeLocalizedStr["Uploading:"]+" "+febeEscapeStr(uploadName)+" "+febeEscapeStr(size.toString())+"kb");
var uri = 'http://upload.box.net/api/1.0/upload/'+febeAuthToken+'/'+febeFolderID;
var req = new XMLHttpRequest();
req.open('POST', uri, false);
req.setRequestHeader("Content-length",multiStream.available());
req.setRequestHeader("Content-type","multipart/form-data; charset: utf-8; accept-charset: utf-8; boundary="+boundary);
req.onload = function(event) {
var tmp = "Response detail: '"+febeAddEntities(event.target.responseText)+"'\n"
//febeprt(tmp,"Fuchsia");
//alert(event.target.responseText)
}
try{
req.send(multiStream);
}catch(e){
febeUploadAborted = true;
febeprt(febeLocalizedStr["Error:"]+" "+febeWrap(e,100),"red")
return false;
}//try/catch
return febeBoxUploadDone(req,uploadName);
}//febeUpload()
function febeAddEntities(myString){
var xmlString = myString.split("<").join("<");
xmlString = xmlString.split(">").join(">");
xmlString = xmlString.split("\"").join(""");
xmlString = xmlString.split("\'").join("'");
return xmlString;
}
function febeBoxUploadDone(req,uploadName){
var resp = req.responseText;
var resStatus = febeParseResp(resp,"status");
switch(resStatus){
case "upload_ok":
febeprt(febeEscapeStr(uploadName)+" "+febeLocalizedStr["uploaded ok"],"green");
var resp = req.responseText;
var domParser = new DOMParser();
var xmldoc = domParser.parseFromString(resp, "text/xml");
var response = xmldoc.getElementsByTagName('response')[0];
var files = response.getElementsByTagName("files")[0].firstChild
var id = files.getAttribute("id");
var fname = files.getAttribute("file_name");
var boxObj = new Object();
boxObj.targetID = id;
boxObj.fName = fname;
return boxObj;
break;
case "upload_some_files_failed":
var resp = req.responseText;
var domParser = new DOMParser();
var xmldoc = domParser.parseFromString(resp, "text/xml");
var response = xmldoc.getElementsByTagName('response')[0];
var files = response.getElementsByTagName("files")[0].firstChild
var err = files.getAttribute("error");
var fname = files.getAttribute("file_name");
febeprt(febeMsg[124]+" "+febeEscapeStr(fname)+": "+febeEscapeStr(err)+febeMsg[105], "red");
return false;
break;
default:
var tmp = febeLocalizedStr["Error:"]+"\n["+req.responseText+"]\n["+uploadName+"]\n"
tmp += febeMsg[280]+" '"+resp+"/"+resStatus+"'\n"
febeprt(tmp,"red");
febeAlert(tmp);
return false;
}//switch
return true;
}//febeBoxUploadDone()
function febeprt(txt,color){
if(!color) color="black";
var prtStr = "<span style='font-family: Courier New,Courier,monospace; font-size:12px; color: "+color+";'>";
prtStr += txt+"<br></span>";
if(febeDispBoxUploadWindow){
var box = document.getElementById("messages");
box.contentDocument.write(prtStr);
var scrollBox = box.contentWindow.document.body;
scrollBox.scrollTop = scrollBox.scrollHeight - scrollBox.clientHeight
}//
return true;
}//febeprt()
function febeEscapeStr(str){
// Replace certain HTML characters with entities
str = str.replace(/&/g, "&");
str = str.replace(/</g,"<");
str = str.replace(/>/g, ">");
return str;
}//febeEscapeStr()
function febeParseResp(resp,which){
var domParser = new DOMParser();
var xmldoc = domParser.parseFromString(resp, "text/xml");
var value;
try{
value = xmldoc.getElementsByTagName(which)[0].firstChild.nodeValue;
}catch(e){value = false;}
return value;
}//febeParseResp
function onProgress(e) {
var percentComplete = (e.position / e.totalSize)*100;
return
}
function febeTestBN(){
// Test Box.net login -
febeSetMsgs();
var results = febeBoxLogin();
if(results == false)return false;
var resStatus = febeParseResp(results,"status");
if(resStatus != "logged"){
var tmp="<style>color: red; font-weight: bold; font-size: 15px;</style>"+febeMsg[186]+"\n"+ resStatus;
febeAlert(tmp);
return false;
}//if
febeGetBoxMsg(results);
var tmp="<style>color: green; font-weight: bold; font-size: 15px;</style>"+febeMsg[185];
tmp += "\n"+febeBoxMessages[0]+"\n";
tmp += "\n"+febeBoxMessages[1];
tmp += "\n"+febeBoxMessages[2];
tmp += "\n"+febeBoxMessages[3];
tmp += "\n"+febeBoxMessages[4];
tmp += "\n"+febeBoxMessages[5];
tmp += "\n"+febeBoxMessages[6];
febeAlert(tmp);
febeBoxLogout();
return true;
}//febeTestBN()
function febeGetBoxMsg(xml){
febeBoxMessages = [];
var login = febeParseResp(xml,"login");
var email = febeParseResp(xml,"email");
var user_id = febeParseResp(xml,"user_id");
var capacity = febeParseResp(xml,"space_amount");
var space_used = febeParseResp(xml,"space_used");
var max_upload_size = febeParseResp(xml,"max_upload_size");
febeBoxMessages.push(febeMsg[192]+" "+login);
febeBoxMessages.push(febeMsg[193]+" "+email);
febeBoxMessages.push(febeMsg[194]+" "+user_id);
var mb = 1048576;
var boxCapacity = parseInt(capacity) / mb;
boxCapacity = Math.round(boxCapacity * 100);
boxCapacity = parseInt(boxCapacity) / 100;
var spaceUsed = parseInt(space_used) / mb;
spaceUsed = Math.round(spaceUsed * 100);
spaceUsed = parseInt(spaceUsed) / 100;
var spaceAvailable = boxCapacity - spaceUsed;
var maxUpload = parseInt(max_upload_size) / mb;
febeBoxMessages.push(febeMsg[195]+" "+boxCapacity+" MB");
febeBoxMessages.push(febeMsg[196]+" "+spaceUsed+" MB");
febeBoxMessages.push(febeMsg[197]+" "+spaceAvailable+" MB");
febeBoxMessages.push(febeMsg[198]+" "+maxUpload+" MB");
return true;
}//febeGetBoxMsg()
function febeLoginMgrObj(username, password){
this.hostname = 'chrome://FEBE {Box.net login}';
this.formSubmitURL = 'Box.net login';
this.httprealm = null;
this.username = username;
this.password = password;
var nsLoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1", Components.interfaces.nsILoginInfo, "init");
return new nsLoginInfo(this.hostname, this.formSubmitURL, this.httprealm, this.username, this.password, "", "");
}//febeLoginMgrObj()
function febeGetBNpassword(username){
// Return box.net password or null
var loginManager = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager);
var password;
var login = febeLoginMgrObj(username, password)
try {
var logins = loginManager.findLogins({}, login.hostname, login.formSubmitURL, login.httprealm);
// Find user from returned array of nsILoginInfo objects
for (var i = 0; i < logins.length; i++) {
if (logins[i].username == username) {
password = logins[i].password;
return password;
break;
}//if
}//for
} catch(ex) {
return null;
}//try
}//febeGetBNpassword()
function febeDisableBoxCheck(){
var enabled = document.getElementById("box_net_enable").checked;
document.getElementById("box_net_info").hidden = !enabled;
var prefName = "extensions.febe.boxnet.username";
var uName = febePrefs.getCharPref(prefName);
document.getElementById("bn_password").value = febeGetBNpassword(uName);
var prefName = "extensions.febe.lastbackup";
var tmp = febePrefs.getCharPref(prefName);
var lastBU = false;
if(tmp != "") lastBU = true;
if(uName != ""){ // Disable entry if it already exists - Enabled with "Reset login" button
document.getElementById("bn_username").disabled = true;
document.getElementById("bn_password").disabled = true;
document.getElementById("bn_save").disabled = true;
document.getElementById("bn_test").disabled = false;
document.getElementById("bn_upload").disabled = !lastBU;
document.getElementById("bn_view").disabled = false;
document.getElementById("box_net_autoupload").disabled = false;
}else{
document.getElementById("bn_test").disabled = true;
document.getElementById("bn_upload").disabled = true;
document.getElementById("bn_view").disabled = true;
document.getElementById("bn_save").disabled = false;
document.getElementById("box_net_autoupload").disabled = true;
document.getElementById("box_net_autoupload").checked = false;
document.getElementById("bn_password").value = "";
}//if
return true;
}//febeDisableBoxCheck()
function febeUploadAbort(){
var tmp = "<style>color: red; font-weight: bold; font-size: 15px;</style>";
tmp += febeMsg[8];
//febeAlert(tmp);
return true;
}//febeUploadAbort()
function febeUploadClose(){
if(febeUploadAborted) febeUploadAbort();
febeBoxLogout();
febePrefs.setBoolPref("dom.disable_window_status_change", febeStatusSave);
return true;
}//febeUploadClose()
function febeBoxLogout(){
var req = new XMLHttpRequest();
var str = 'http://www.box.net/api/1.0/rest?action=logout&api_key='+febeBoxKey+'&auth_token='+febeAuthToken;
req.open('GET',str, false);
req.send(null);
var resp = req.responseText;
var resStatus = febeParseResp(resp,"status");
if (resStatus != "logout_ok"){
var tmp="<style>color: red; font-weight: bold; font-size: 15px;</style>"+febeMsg[190]+"\n"+ febeMsg[189]+" "+resStatus;
febeAlert(tmp);
return false;
}//if
return true;
}//febeBoxLogout()
function febeResetBN(){
febeClearLogin()
document.getElementById("bn_username").disabled = false;
document.getElementById("bn_username").value = "";
document.getElementById("bn_password").disabled = false;
document.getElementById("bn_password").value = "";
document.getElementById("bn_test").disabled = true;
document.getElementById("bn_upload").disabled = true;
document.getElementById("bn_view").disabled = true;
document.getElementById("bn_save").disabled = false;
document.getElementById("box_net_autoupload").disabled = true;
document.getElementById("box_net_autoupload").checked = false;
febePrefs.setBoolPref("extensions.febe.boxnet.autoupload",false);
febePrefs.setCharPref("extensions.febe.boxnet.username","");
febePrefs.setCharPref("extensions.febe.boxnet.password","");
document.getElementById("bn_username").focus();
}//febeResetBN()
function febeSaveBN(){
var uName = document.getElementById("bn_username").value;
var password = document.getElementById("bn_password").value;
if(password == "" || uName == ""){
febeAlert(febeMsg[187]);
if(uName == "") document.getElementById("bn_username").focus();
if(password == "") document.getElementById("bn_password").focus();
if(password == "" || uName == "") document.getElementById("bn_username").focus();
return false;
}//if
var loginInfo = new febeLoginMgrObj(uName, password);
Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager).addLogin(loginInfo);
febePrefs.setCharPref("extensions.febe.boxnet.username",uName);
febePrefs.setCharPref("extensions.febe.boxnet.password","<encrypted>");
document.getElementById("bn_test").disabled = false;
document.getElementById("bn_upload").disabled = false;
document.getElementById("bn_view").disabled = false;
document.getElementById("bn_save").disabled = true;
document.getElementById("box_net_autoupload").disabled = false;
return true;
}//febeSaveBN()
function febeClearLogin(){
// Remove all FEBE box.net logins
var hostname = 'chrome://FEBE {Box.net login}';
var formSubmitURL = 'Box.net login';
var httprealm = null;
var passwordManager = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager);
var logins = passwordManager.findLogins({}, hostname, formSubmitURL, httprealm);
for (var i = 0; i < logins.length; i++) {
if (logins[i].hostname == hostname) {
passwordManager.removeLogin(logins[i]);
break;
}//if
}//for
return true;
}//febeClearLogin()
function febeViewBoxFolder(){
febeBoxLogin();
febeOpenLink('http://www.box.net/files');
return true;
}//febeViewBoxFolder()
function febeBoxLogin(){
var prefName = "extensions.febe.boxnet.username";
var bnUsername = febePrefs.getCharPref(prefName);
var bnPassword = febeGetBNpassword(bnUsername);
var method = "";
var k = "&api_key=" + febeBoxKey;
var l = "&login=" + encodeURIComponent(bnUsername);
var p = "&password=" + encodeURIComponent(bnPassword);
var m = "&method=";
var req = new XMLHttpRequest();
req.open('GET', 'http://www.box.net/api/1.0/rest?action=authorization' + k + l + p + m, false);
req.onreadystatechange = function (aEvt) {
var r = req.readyState;
var s = req.status;
if (req.readyState != 4 || req.status != 200) {
var tmp="<style>color: red; font-weight: bold; font-size: 15px;</style>"+febeMsg[188]+"\n"+ febeMsg[189]+" "+resStatus;
febeAlert(tmp);
return false;
}//if
};
req.send(null);
var results = req.responseText;
febeAuthToken = febeParseResp(results,"auth_token");
return results;
}//febeBoxLogin()
function febeGetOnlineTree(){
febeMsg = window.arguments[0]; // Load messages
febeSetLocalizedDesc();
var filter = Application.storage.get("type", "");
filter = febeLocalizedStr[filter]; // Localized type description
document.title += ": "+filter;
// Get file tree
if(febeBoxLogin() == false){return false;}
// Get a list of tags
var febeBoxTags = {};
var xmlstr = "<?xml version='1.0' encoding='UTF-8' ?>";
xmlstr += "<request>";
xmlstr += "<action>export_tags</action>";
xmlstr += "<api_key>"+febeBoxKey+"</api_key>";
xmlstr += "<auth_token>"+febeAuthToken+"</auth_token>";
xmlstr += "</request>";
var req = new XMLHttpRequest();
req.open('POST', 'http://www.box.net/api/1.0/xml', false);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
try{
req.send(xmlstr);
}catch(e){
febeUploadAborted = true;
return false;
}//try/catch
var resp = req.responseText;
var resStatus = febeParseResp(resp,"status");
switch(resStatus){
case "export_tags_ok":
var domParser = new DOMParser();
var xmldoc = domParser.parseFromString(resp, "text/xml");
var response = xmldoc.getElementsByTagName('response')[0];
var tags = response.getElementsByTagName("tag");
for(var i in tags){
try{
var tname = tags[i].textContent;
var id = tags[i].attributes["id"].value;
febeBoxTags[id] = tname;
}catch(e){;}
}//for
break;
default:
febeAlert(febeMsg[201]+"\n"+resStatus);
return false;
}//switch
// Get tree
var xmlstr = "<?xml version='1.0' encoding='UTF-8' ?>";
xmlstr += "<request>";
xmlstr += "<action>get_account_tree</action>";
xmlstr += "<api_key>"+febeBoxKey+"</api_key>";
xmlstr += "<auth_token>"+febeAuthToken+"</auth_token>";
xmlstr += "<folder_id>0</folder_id>";
xmlstr += "<params><item>nozip</item></params>";
xmlstr += "</request>";
var req = new XMLHttpRequest();
req.open('POST', 'http://www.box.net/api/1.0/xml', false);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
try{
req.send(xmlstr);
}catch(e){
febeUploadAborted = true;
return false;
}//try/catch
var resp = req.responseText;
var resStatus = febeParseResp(resp,"status");
switch(resStatus){
case "listing_ok":
break;
default:
febeAlert(febeMsg[202]+"\n"+resStatus);
return false;
}//switch
// OK, got the tree, now parse it
var tree = document.getElementById("febeRoot");
var parser = new DOMParser();
var dom = parser.parseFromString(resp, "text/xml");
var tree = document.getElementById("boxNetTree");
var treeWalker = document.createTreeWalker(dom, 1, null, true);
var root, label;
var titem = document.createElement('treeitem');
var trow = document.createElement('treerow');
var tcell = document.createElement('treecell');
var tchild = document.createElement('treechildren');
// Create "Box.net" row
var boxRootChild = tchild.cloneNode(false);
boxRootChild.setAttribute('id', "boxRootChild");
tree.appendChild(boxRootChild);
var titem = titem.cloneNode(false);
titem.setAttribute('id', "boxRoot");
titem.setAttribute('container', "true");
titem.setAttribute('open', "true");
var boxRoot = boxRootChild.appendChild(titem);
var trow = trow.cloneNode(false);
var tcell = tcell.cloneNode(false);
tcell.setAttribute('label', "Box.net");
trow.appendChild(tcell);
var tcell = tcell.cloneNode(false);
tcell.setAttribute('label', "");
trow.appendChild(tcell);
var tcell = tcell.cloneNode(false);
tcell.setAttribute('label', "");
trow.appendChild(tcell);
var tcell = tcell.cloneNode(false);
tcell.setAttribute('label', febeLocalizedStr["directory"]);
trow.appendChild(tcell);
var tcell = tcell.cloneNode(false);
tcell.setAttribute('label', febeLocalizedStr["size"]);
trow.appendChild(tcell);
boxRoot.appendChild(trow);
// Create "FEBE backups" row
var FEBEbackupsChild = tchild.cloneNode(false);
FEBEbackupsChild.setAttribute('id', "FEBEbackupsChild");
boxRoot.appendChild(FEBEbackupsChild);
var titem = titem.cloneNode(false);
titem.setAttribute('id', "FEBEbackups");
titem.setAttribute('container', "true");
titem.setAttribute('open', "true");
var FEBEbackups = FEBEbackupsChild.appendChild(titem);
var trow = trow.cloneNode(false);
var tcell = tcell.cloneNode(false);
tcell.setAttribute('label', febeLocalizedStr["Febe Backups"]);
trow.appendChild(tcell);
var tcell = tcell.cloneNode(false);
tcell.setAttribute('label', "");
trow.appendChild(tcell);
var tcell = tcell.cloneNode(false);
tcell.setAttribute('label', "");
trow.appendChild(tcell);
var tcell = tcell.cloneNode(false);
tcell.setAttribute('label', febeLocalizedStr["directory"]);
trow.appendChild(tcell);
var tcell = tcell.cloneNode(false);
tcell.setAttribute('label', "");
trow.appendChild(tcell);
FEBEbackups.appendChild(trow);
var backupItemsChild = tchild.cloneNode(false);
backupItemsChild.setAttribute('id', "backupItemsChild");
backupItemsChild = FEBEbackups.appendChild(backupItemsChild);
while(treeWalker.nextNode()){
var n = treeWalker.currentNode;
var id = n.getAttribute("id");
febeBoxNodeList[id] = n;
var createdStr = n.getAttribute("created");
if(createdStr){
createdStr = createdStr.toString() + "000";
var createdInt = parseInt(createdStr);
var d = new Date(createdInt); // Mon Oct 27 2008 16:36:40 GMT-0700 (US Mountain Standard Time) - object
var ds = d.toString(); // "Mon Oct 27 2008 16:36:40 GMT-0700 (US Mountain Standard Time)"
ds = ds.substr(0,16); // "Mon Oct 27 2008 "
var dt = d.toLocaleTimeString() // "4:36:40 PM"
var created = ds + dt; // "Mon Oct 27 2008 4:36:40 PM"
}//if
var sizeStr = n.getAttribute("size");
if(sizeStr){
var s = Math.round(parseInt(sizeStr) / 1024);
var size = s.toString()+"kb";
}//if
switch(n.nodeName){
case "file":
var ti = document.createElement('treeitem');
ti.setAttribute('container', "false");
var tcell = document.createElement('treecell');
var tr = document.createElement('treerow');
var tc = tcell.cloneNode(false);
label = n.getAttribute("file_name");
tc.setAttribute('label', label); // Name
tr.appendChild(tc);
var tc = tcell.cloneNode(false);
tc.setAttribute('label', id); // Id
tc.setAttribute('hidden', "true");
tr.appendChild(tc);
var tc = tcell.cloneNode(false); // Created
tc.setAttribute('label', created);
tr.appendChild(tc);
var tct = tcell.cloneNode(false); // Type
tct.setAttribute('label', "");
tr.appendChild(tct);
var tc = tcell.cloneNode(false); //Size
tc.setAttribute('label', size);
tr.appendChild(tc);
ti.appendChild(tr);
break;
case "tag":
var tag = febeBoxTags[id];
if(tag == filter){
tct.setAttribute('label', tag);
backupItemsChild.appendChild(ti);
}//if
break;
default:
break;
}//switch
}//while
return true;
}//febeGetOnlineTree(()
function febeViewDoc(elm){
var serializer = new XMLSerializer();
var xml = serializer.serializeToString(elm);
var tmp = xml.replace(/></g,">\n<");
var content = document.getElementById("tb");
content.value = tmp;
return true;
}
function febeDownloadBox(){
var tree = document.getElementById("boxNetTree");
var selection = tree.view.selection;
var name = tree.view.getCellText(tree.currentIndex, tree.columns.getColumnAt(0));
var id = tree.view.getCellText(tree.currentIndex, tree.columns.getColumnAt(1));
var type = tree.view.getCellText(tree.currentIndex, tree.columns.getColumnAt(3));
if(id == ""){return false;}
var progressMeter = document.getElementById("progressMeter");
var progressPct = document.getElementById("progressPct");
var progressBox = document.getElementById("progressBox");
var progressLabel = document.getElementById("progressLabel");
progressLabel.value = febeMsg[242].replace("%FILE%",type);
progressBox.setAttribute("hidden", "false");
// Get file
var results = febeBoxLogin();
if(results == false)return false;
var resStatus = febeParseResp(results,"status");
if(resStatus != "logged"){
var tmp="<style>color: red; font-weight: bold; font-size: 15px;</style>"+febeMsg[186]+"\n"+ resStatus;
febeAlert(tmp);
return false;
}//if
var url = 'http://box.net/api/1.0/download/'+febeAuthToken+'/'+id;
var filter = Application.storage.get("type", "");
if(filter == "extension" || filter == "theme"){
var xpi = new Object;
xpi[name] = url;
InstallTrigger.install(xpi);
}else{
var file = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("TmpD", Ci.nsIFile);
file.append("FEBE_Boxnet_restorefile");
var wbp = Cc['@mozilla.org/embedding/browser/nsWebBrowserPersist;1'].createInstance(Ci.nsIWebBrowserPersist);
var nsIWBP = Components.interfaces.nsIWebBrowserPersist;
var flags = nsIWBP.PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION |
nsIWBP.PERSIST_FLAGS_REPLACE_EXISTING_FILES |
nsIWBP.PERSIST_FLAGS_BYPASS_CACHE;
wbp.persistFlags = flags;
var ios = Cc['@mozilla.org/network/io-service;1'].getService(Ci.nsIIOService);
var uri = ios.newURI(url, null, null);
const febeCi = Components.interfaces;
wbp.progressListener = {
onProgressChange: function(aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress) {
var percentComplete = parseInt((aCurTotalProgress/aMaxTotalProgress)*100);
progressMeter.setAttribute("value", percentComplete);
progressPct.setAttribute("value", percentComplete+"%");
},
onStateChange: function( aWebProgress, aRequest, aStateFlags, aStatus, aDownload ) {
if (aStateFlags & febeCi.nsIWebProgressListener.STATE_STOP){
febeDump("Download done");
Application.storage.set("created", febeBoxNodeList[id].getAttribute("created") + "000");
Application.storage.set("boxname", febeBoxNodeList[id].getAttribute("file_name"));
Application.storage.set("name", file.leafName);
Application.storage.set("location", file.path);
Application.storage.set("parent", file.parent.path);
Application.storage.set("abort", false);
Application.storage.set("url", url);
window.close();
return true;
}//if
}
}
wbp.saveURI(uri, null, null, null, "", file);
}//if
}//febeDownloadBox()
function febeCancelDownload(){
Application.storage.set("created", "N/A");
Application.storage.set("name", "N/A");
Application.storage.set("location", "N/A");
Application.storage.set("abort", true);
return true;
}//febeCancelDownload()
function febeSelectItem(){
var tree = document.getElementById("boxNetTree");
var selection = tree.currentIndex;
if(selection < 2){return false;} // Can't select first two folders
var d = document.getElementById("RestoreBox");
d.disabled = false;
return true;
}//febeSelectItem()
function febeOpenBoxUploadWindow(){
febeDispBoxUploadWindow = febePrefs.getBoolPref("extensions.febe.boxnet.uploadwindow");
if(febeDispBoxUploadWindow){
window.openDialog('chrome://febe/content/BoxUpload.xul','FEBE upload', 'chrome,alwaysRaised,centerscreen,resizable,minimizable,height=500,width=500',febeMsg);
}else{
var statusSave = febePrefs.getBoolPref("dom.disable_window_status_change");
alert(febeStatusSave+"\n"+typeof febeStatusSave)
if(febeStatusSave){febePrefs.setBoolPref("dom.disable_window_status_change", false);}
setTimeout('febeUploadBackup();',2000);
}//if
}//febeOpenBoxUploadWindow()
function febeGetBoxRootDir(){
var prefName = "extensions.febe.boxnet.rootdir";
var folderName = febePrefs.getCharPref(prefName);
return folderName;
}//febeGetBoxRootDir()
function febeSetBoxRootDir(){
if(!febePrefs.getBoolPref("extensions.febe.boxnet.enabled")){return true;}
var prefName = "extensions.febe.boxnet.rootdir";
var folderName = document.getElementById("bn.rootdir").value;
var retVal = febeCheckBoxRootDir(folderName)
if(retVal == "string"){
febePrefs.setCharPref("extensions.febe.boxnet.rootdir",folderName);
}else{
return retVal;
}//if
return true;
}//febeSetBoxRootDir()
function febeCheckBoxRootDir(folderName){
var badChars = '\\/:*?"<>|';
for(var i=0; i<badChars.length; i++){
if(folderName.indexOf(badChars[i]) != -1){
var tmp="<style>color: red; font-weight: bold; font-size: 12px;</style>"+febeMsg[309];
febeAlert(tmp);
return false;
}//if
}//for
if(folderName.substr(0,1) == " "){
var tmp="<style>color: red; font-weight: bold; font-size: 12px;</style>"+febeMsg[308];
febeAlert(tmp);
return false;
}//if
if(folderName.length < 1){
var tmp="<style>color: red; font-weight: bold; font-size: 12px;</style>"+febeMsg[307];
febeAlert(tmp);
folderName = febeResetPref("extensions.febe.boxnet.rootdir");
return folderName;
}//if
return true;
}//febeCheckBoxRootDir()